﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Security.Principal;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Collections.Generic;

public partial class AsignarEmpleados : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            IPrincipal p = HttpContext.Current.User;

            if (!p.IsInRole("Empleado"))
            {
                Session["Mensaje"] = "Usted no posee los permisos necesarios para ingresar a esta página";

                if (Session["Identificador"] != null)
                {
                    Session["IrAPagina"] = "Principal_Clientes.aspx";
                    Response.Redirect("Bienvenida.aspx");
                }
                else
                {
                    Response.Redirect("login.aspx");
                }
            }
            else
            {
                precargar();
                LinkedList<AsignarEmpleadosGui> aegLinkedList = new LinkedList<AsignarEmpleadosGui>();
                Session["EmpleadosGui"] = aegLinkedList;
            }
        }
    }

    protected void precargar() 
    {
        App_Negocio.Evento evento = new App_Negocio.Evento();
        evento.Id = int.Parse(Session["EventoId"].ToString());
        DataTable dt = evento.buscarEvento();
        lblEvento.Text = evento.Id.ToString();
        lblNombre.Text = dt.Rows[0]["Nombre"].ToString();
        lblFecha.Text = DateTime.Parse(string.Format(dt.Rows[0]["Fecha"].ToString())).ToShortDateString();
       
        lblHora.Text = dt.Rows[0]["HoraInicio"].ToString();
        lblTipoEvento.Text = dt.Rows[0]["TipoEve"].ToString();
        lblSalon.Text = dt.Rows[0]["NomSalon"].ToString();
             
        cargarComboArea(ddlAreaTrabajo);
        cargarComboArea(ddlAreaCosto);
    }


    protected void cargarComboArea(DropDownList ddl){

        App_Negocio.EmpleadosArea a = new App_Negocio.EmpleadosArea();
        DataTable dt = a.popularAreas();

        ddl.DataSource = dt;
        ddl.DataTextField = "Nombre";
        ddl.DataValueField = "Id";
        ddl.DataBind();
    
    }


    protected void ddlAreaTrabajo_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (ddlAreaTrabajo.SelectedIndex != 0)
        {
            App_Negocio.EmpleadosArea area = new App_Negocio.EmpleadosArea();
            area.Id = int.Parse(ddlAreaTrabajo.SelectedValue);
            App_Negocio.Empleado emp = new App_Negocio.Empleado();

            LinkedList<App_Negocio.Empleado> listEmpleados = emp.buscarEmpleadoxArea(area.Id);

            LinkedList<AsignarEmpleadosGui> listEmpleadosGui = new LinkedList<AsignarEmpleadosGui>();
            foreach (App_Negocio.Empleado empleadoGui in listEmpleados)
            {

                AsignarEmpleadosGui gui = new AsignarEmpleadosGui(empleadoGui, ddlAreaTrabajo.SelectedItem.Text);
                listEmpleadosGui.AddLast(gui);
            }
            Session["EmpleadosArea"] = listEmpleadosGui;

            gvEmpleados.DataSource = listEmpleadosGui;
            gvEmpleados.DataKeyNames = new string[] { "Nombre", "Apellido", "Id", "Costo", "TipoEmpleado" };
            gvEmpleados.DataBind();
            
            }
        
    }


    protected void gvEmpleados_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
    {
        LinkedList<AsignarEmpleadosGui> aegEmpleado= (LinkedList<AsignarEmpleadosGui>)Session["EmpleadosArea"];
        AsignarEmpleadosGui aeg = aegEmpleado.ElementAt<AsignarEmpleadosGui>(e.NewSelectedIndex);

        LinkedList<AsignarEmpleadosGui> aegLinkedList = (LinkedList<AsignarEmpleadosGui>)Session["EmpleadosGui"];

        aegLinkedList.AddLast(aeg);

        gvEmpleadosSeleccionados.DataSource = aegLinkedList;
        gvEmpleadosSeleccionados.DataBind();
        Session["EmpleadosGui"] = aegLinkedList;
        lblcostoTotal.Text = ""+calcularCostoTotal();
    }

    private class AsignarEmpleadosGui
    {
        private int id;

        public int Id
        {
            get { return id; }
            set { id = value; }
        }
        private string nombre;

        public string Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }
        private string apellido;

        public string Apellido
        {
            get { return apellido; }
            set { apellido = value; }
        }
        private string area;

        public string Area
        {
            get { return area; }
            set { area = value; }
        }
        float costo;

        public float Costo
        {
            get { return costo; }
            set { costo = value; }
        }

        private string tipoEmpleado;

        public string TipoEmpleado
        {
            get { return tipoEmpleado; }
            set { tipoEmpleado = value; }
        }
        


        public AsignarEmpleadosGui(App_Negocio.Empleado fuente, String area)
        {
            this.Nombre = fuente.NomEmpleado;
            this.Apellido = fuente.ApeEmpleado;
            this.Id = fuente.EmpleadoId;
            this.area = area;
            this.tipoEmpleado = fuente.TipoEmpleado.Nombre;
            this.costo = fuente.TipoEmpleado.PrecioxEvento;
        }
    }

    protected void btnAgregarEmpleado_Click(object sender, EventArgs e)
    {

        LinkedList<AsignarEmpleadosGui> aegLinkedList = (LinkedList<AsignarEmpleadosGui>)Session["EmpleadosGui"];
        App_Negocio.Empleado emp = new App_Negocio.Empleado();
        App_Negocio.Empleado_Tipo empTipo = new App_Negocio.Empleado_Tipo();

        emp.ApeEmpleado = string.Format(gvEmpleados.SelectedDataKey.Values["Apellido"].ToString());
        emp.NomEmpleado = string.Format(gvEmpleados.SelectedDataKey.Values["Nombre"].ToString());
        emp.EmpleadoId = int.Parse(string.Format(gvEmpleados.SelectedDataKey.Values["Id"].ToString()));
        emp.TipoEmpleado.PrecioxEvento = float.Parse(string.Format(gvEmpleados.SelectedDataKey.Values["Costo"].ToString()));

        AsignarEmpleadosGui empleado = new AsignarEmpleadosGui(emp, ddlAreaTrabajo.SelectedItem.Text);
        aegLinkedList.AddLast(empleado);

        gvEmpleadosSeleccionados.DataSource = aegLinkedList;
        gvEmpleadosSeleccionados.DataBind();
        Session["EmpleadosGui"] = aegLinkedList;

    }

    protected void gvMenuesSeleccionados_BorrarFila(object sender, GridViewDeleteEventArgs e)
    {
        LinkedList<AsignarEmpleadosGui> aegList = (LinkedList<AsignarEmpleadosGui>)Session["EmpleadosGui"];
        AsignarEmpleadosGui aeg = aegList.ElementAt<AsignarEmpleadosGui>(e.RowIndex);
        aegList.Remove(aeg);
        gvEmpleadosSeleccionados.DataSource = aegList;
        gvEmpleadosSeleccionados.DataBind();
        Session["EmpleadosGui"] = aegList;
        lblcostoTotal.Text = ""+calcularCostoTotal();
    }
   
    protected void ddlAreaCosto_SelectedIndexChanged(object sender, EventArgs e)
    {
        
        float costo = 0;
        LinkedList<AsignarEmpleadosGui> aegList = (LinkedList<AsignarEmpleadosGui>)Session["EmpleadosGui"];
        foreach (AsignarEmpleadosGui empleado in aegList)
        {
            if (empleado.Area.Equals(ddlAreaCosto.SelectedItem.Text))
            {
                costo += empleado.Costo;
            }
        }
        lblcosto.Text = "" + costo;


    }
    protected void btnConfirmar_Click(object sender, EventArgs e)
    {
        LinkedList<AsignarEmpleadosGui> aegLinkedList = (LinkedList<AsignarEmpleadosGui>)Session["EmpleadosGui"];
        App_Negocio.Evento evento = new App_Negocio.Evento();
        evento.Id = int.Parse(lblEvento.Text);
        List<App_Negocio.Empleado> listEmp = new List<App_Negocio.Empleado>();

        foreach (AsignarEmpleadosGui empleado in aegLinkedList)
        {
            App_Negocio.Empleado emp= new App_Negocio.Empleado();
            emp.EmpleadoId = empleado.Id;
            listEmp.Add(emp);
        }
        evento.guardarEmpleados(listEmp);
        Response.Redirect("Mostrar_Evento.aspx");



    }
    protected void guardarEmpleados(int empId, int eventoId) {
        App_Negocio.Evento ev = new App_Negocio.Evento();
        ev.Id = int.Parse(lblEvento.Text);

    
    }
    protected void btnSalir_Click(object sender, EventArgs e)
    {
        Response.Redirect("Mostrar_Evento.aspx");
    }

    protected float calcularCostoTotal() {
        float costo = 0;
        LinkedList<AsignarEmpleadosGui> aegList = (LinkedList<AsignarEmpleadosGui>)Session["EmpleadosGui"];
        foreach (AsignarEmpleadosGui empleado in aegList)
        {
            costo += empleado.Costo;
                    }
        return costo;
    }
}
